在VisualApplets 中,實作的範例設計包含執行幾何變換、複合幾何變換 以及失真校正,以及由影像矩控制的幾何 變換。幾何變換是透過目標至來源的映射來實作,亦即 逆變換。此方法對於 確保傳送至個人電腦的目標影像中不存在缺失像素至關重要 [Bur06]。 我們已基於 運算子 FrameBufferRandomRead ,並另以運算子 PixelReplicator實現。兩者之間的差異 將在以下各小節中闡述。在這些小節中,將詳細介紹範例設計。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ FrameBufferRandomRead.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何變換:使用運算子進行旋轉、平移、縮放 FrameBufferRandomRead 運算子 |
|
在 VA 設計「Geometric Transformation_FrameBufferRandomRead.va」中實作了幾何變換,採用
目標至來源的映射方式。此方法對於確保傳送至 PC 的目標影像中
不會出現缺失像素至關重要 [Bur06].
原始影像的座標
是透過逆
幾何變換,針對所有目標座標進行計算的
.
在座標所指的位置
來源影像中
的像素值是透過運算子讀取的 FrameBufferRandomRead 當並行度為 1 時,該運算器會將每個像素分別儲存於 DRAM 中,並
依序讀取每個像素。當
計算出的原始影像座標與原始影像中的像素座標不符時,線性插值有助於將輸出影像中的像素值修正為 PC。
如圖所示。 297 您可以看到其基本設計架構。
此設計包含一個採用Camera Link 基本配置的相機介面(BaseGrayCamera_Camera)所構成的相機介面,以及 HierarchicalBox 幾何變換 ,該元件負責對擷取的影像進行縮放、旋轉和平移。 運算子 ImageBuffer_Buffer 可將影像儲存起來。透過 DMA(運算子 DmaToPC_DMA0) 將影像傳輸至個人電腦。
在298中,您可以查看 HierarchicalBox 的內容 GeometricTransformation的內容。 參數 IntParamTranslator、 FloatParamReference 以及 IntParamReference 讓您能夠 非常輕鬆地設定幾何變換的相關參數(縮放、旋轉、平移的數值以及影像尺寸) 。這些屬性 為影像 Height 和 Width,以及您希望沿 x 和 y 方向平移影像的像素數 (參數: Translatex 與 Translatey)以及 x 和 y 方向的縮放係數 Scalex 以及 Scaley。您可以透過參數 Phi以度為單位設定旋轉角度。此外,您亦可設定 這些 屬性 。 GeometricTransformation上「右鍵點擊」,來設定 這些屬性。您可以在 圖298 中看到此方塊的內容。
當 來源圖片 會以線性方式寫入緩衝區 FrameBufferRandomRead. 針對每個像素,其最近鄰會被儲存
於一個 2x2 核中(HierarchicalBox NextNeighbours).
目標影像的座標
(等於…… 21)
是透過運算子所建立的 CreateBlankImage, CoordinateX 進行明確的生命週期管理即呼叫 Y座標
在 HierarchicalBox 輸出圖片 (包含於 HierarchicalBox 中) 座標轉換)
(參見圖 299 進行明確的生命週期管理即呼叫 300)。
座標
可根據該方程式,以反向進行旋轉、平移和/或縮放。 21. 旋轉角度
以及參數
進行明確的生命週期管理即呼叫
關於轉換與縮放
可透過如上所述,在傳輸參數中設定相應的常數來選擇。如圖中所示。
301 您可以看到該等式的
向量代數(VA)實現。 21 並可能進行進一步擴展。
逆變換所得的座標即為源座標
進行明確的生命週期管理即呼叫
(等於…… 21). 在 HierarchicalBox 中 SplitFractionalAndIntegerBit
(參見圖 298)
這些座標的整數位與小數位部分是分開的。整數位部分對應於
原始影像中的像素位置,
即是此運算子的座標輸入 FrameBufferRandomRead 在 x 方向和 y 方向上(參見圖……) 298).
此運算子會從來源
影像的對應座標處,讀取像素值資訊(並行度 = 1)及其相鄰像素(參見上文)。
來源座標的小數位部分
進行明確的生命週期管理即呼叫
對應於原始影像中的像素間位置。
根據這些資訊,以及原始影像中鄰近像素的像素值資訊,目標影像中的真實像素值
會透過 HierarchicalBox 進行雙線性
插值 Interpolation. 關於插值過程的詳細說明,請參閱 [Bur06]。
在圖302和303中,您可以看到一個 幾何變換的範例,包括原始影像與目標影像。此處執行了沿 x 軸與 y 軸各 100 像素的平移,以及 約 45° 的旋轉。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ImageMoments.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何變換:利用影像矩將物件旋轉並平移至影像中心 |
|
在此範例設計中,透過影像矩來確定 RGB 影像中物件的位置與旋轉角度。 系統會將影像 旋轉至水平 方向,並將其平移至影像中心。預設情況下,輸入影像的尺寸為 640x240 像素 ,輸出影像的尺寸則為 256x128 像素。 圖304展示了基本設計結構。
此設計包含一個採用Camera Link 基礎配置的RGB攝影機介面(BaseRgbCamera_Camera)以及 HierarchicalBox 幾何變換 ,用於對擷取的影像進行旋轉與平移。在「屬性」中「右鍵點擊」 可設定輸入與輸出影像的尺寸以及二值化閾值。此閾值與下文所述的 影像矩計算相關。 幾何變換採用「目標至來源」映射(請參閱 節中的介紹文字)。 透過 DMA(運算子 DmaToPC_DMA0)將影像傳輸至 PC。在圖305 中,您可以看到 幾何變換的內容。
物體相對於水平位置的旋轉角度及其重心 位置,是透過 HierarchicalBox 中的影像矩來確定的 ImageMoments ,該角值是根據二值化影像(HierarchicalBox 二值化)上計算的 HierarchicalBoxImageMoments圖像矩來確定。 ImageMoments 的內容等同於方框 ImageMoments的內容,這與 中的內容(參見第 節中的圖325),但未包含物體偏心率的計算。HierachicalBox ImageMoments 的分層方塊ImageMoments(由上至下)的輸出連結分別為 x 方向與 y 方向的重心位置,以及旋轉角度。 基於這些參數所進行的源座標計算(依據式 (21)),即為 分層方塊 CoordinateTransformation的內容。 在第 306頁中,您可以看到此方塊的內容。
在 HierarchicalBox 同步 x 軸與 y 軸方向的重心單一像素值以及旋轉角度,會延伸至輸出影像
的尺寸,該尺寸在 HierarchicalBox 中定義 輸出圖片. 此方塊的輸出連結代表目標影像的座標
. 在 HierarchicalBox 中
逆變換 來源座標
進行明確的生命週期管理即呼叫
是根據下列方程式計算得出的:
21. 如圖所示。 307
你可以看到這個盒子裡的內容。
此方框中的設計結構與範例「GeometricTransformation_FrameBufferRandomRead.va」
及「GeometricTransformation_PixelReplicator.va」中逆變換的實作方式相似。不同之處在於,x 軸與 y 軸方向的平移參數
是由
重心與影像中心在 x 軸與 y 軸方向上的差值所決定(請參閱方框內容 Translation_x 進行明確的生命週期管理即呼叫 Translation_y).
旋轉角度(方框內的內容 Phi) 由影像矩計算的結果所定義。
回到圖中的基本設計結構。 304. 計算出的原始影像座標
進行明確的生命週期管理即呼叫
代表
方框的輸出連結 座標轉換. 盒內 幾何變換
(參見圖 308) 透過該算子進行的幾何變換
FrameBufferRandomRead 並參照範例
「GeometricTransformation_FrameBufferRandomRead.va」的方式,對正確的目標像素值進行雙線性插值(參見圖 298 在該節中
)。
以圖309中的示例物件為例,您可以在圖310 中看到經由 方向與位置校正後的目標影像。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_PixelReplicator.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何變換:使用運算子進行旋轉、平移、縮放 PixelReplicator |
|
VisualApplets 的設計範例「GeometricTransformation_PixelReplicator.va」執行與範例 「GeometricTransformation_FrameBufferRandomRead.va」相同的幾何變換, 但效能更高。如上所述,運算子 FrameBufferRandomRead 會將每個像素分別儲存於 DRAM 中,並依序逐一讀取。在此範例中,一定數量 的像素會被儲存於一個 DRAM 儲存單元中。 此範例設計僅在待讀取的像素與前一個像素不在同一個 DRAM 儲存單元時,才會從 DRAM 讀取。 如圖311所示 每 DRAM 儲存單元存放 8 個像素的範例,可讓您了解其效能提升的程度。
DRAM 區塊以綠色標示。要讀取 a 至 i 這 9 個像素,只需 3 個 DRAM 週期,而非 9 個。在此我們達成了 3 倍的有效並行度。 單一 RAM 儲存單元最多可儲存 8 位元像素,總數為 32 個(marathon ,VCL 資料寬度:256 位元)。 RAM 儲存單元區塊的 ROI 形狀由 幾何變換的旋轉角度所定義。在此範例中,預設選取 9x3 像素的 RAM 儲存單元形狀。 基本設計結構等同於 圖297中的設計結構,但未包含運算子 PARALLELdn_To1。 HierarchicalBox GeometricTransformation 的內容,亦等同於範例「GeometricTransformation_FrameBufferRandomRead.va」中 對應的方塊(圖298)。差異在於該運算子 FrameBufferRandomRead 已被 HierarchicalBox FrameBufferRandomRead_Par8所取代。您可參閱圖312 了解其內容。
在方塊 CollectNeighbors 原始影像被分割為多個子ROI,這些子ROI定義了每個 RAM 單元的大小。此處選取 9x3 作為 RAM 單元大小。在
的
HierarchicalBoxes SplitAdressX 進行明確的生命週期管理即呼叫 SplitAdressY 來源座標的整數位元部分
進行明確的生命週期管理即呼叫
由於逆幾何變換(參見第
) 分為兩個部分。上方的位元部分(即
SplitAdressX 進行明確的生命週期管理即呼叫 SplitAdressY) 代表 DRAM 儲存單元的位置,低位元部分則代表該
DRAM 儲存單元內的像素位置。在 HierarchicalBox 中的 DRAM 儲存單元座標處讀取該 DRAM 儲存單元 緩衝區 (包含運算子 FrameBufferRandomRead) 若未在
HerarchicalBox 中做出決定 RepeatDecider以重複使用先前的 DRAM 儲存單元。若決定重複使用先前的儲存單元,則需複製該 DRAM 儲存單元的像素值。
此操作
是在 HierarchicalBox 中執行的 複製值 與操作員 PixelReplicator. 盒內 ExtractSubKernel 所需的像素值
連同其相鄰像素,會透過將像素座標作為輸出,從 DRAM 儲存單元中提取出來 SplitAdressX 進行明確的生命週期管理即呼叫 SplitAdressY (下方的輸出連結)。
對正確目標像素值的雙線性插值,其執行方式與範例中的做法相同,詳見 .
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ DistortionCorrection.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何變換:利用運算子進行旋轉、平移、縮放、變形及梯形校正 PixelReplicator |
|
VA 範例「GeometricTransformation_DistortionCorrection.va」是設計「GeometricTransformation_PixelReplicator.va」的延伸。 此外, 此設計中亦實現了畸變與梯形失真校正(依據式 (22)及式 (23))。以下僅針對與 「GeometricTransformation_PixelReplicator.va」不同的部分進行說明。在圖313中,您可以看到 基本設計結構。
來自 CameraLink 基本配置下相機介面的灰階影像(最大尺寸:4096x4096 像素) (BaseGrayCamera_Camera)經由 HierarchicalBox 進行變換 GeoTransAndDistCorr 中進行變換,並透過 DMA 傳輸至電腦 (DmaToPC_DMA0)。此結構相當於設計中的「GeometricTransformation_FrameBufferRandomRead」及 「GeometricTransformation_PixelReplicator」。 GeoTransAndDistCorr 的結構等同於方框 GeometricTransformation 中的方框結構 (參見圖298)。此處除執行逆變換外, 還會進行畸變與梯形失真校正。方框 CoordinateTransformation方框的內容 方塊的內容(位於方塊 GeometricTransformation)中的內容如圖314 所示。
相當於「GeometricTransformation_FrameBufferRandomRead」和
「GeometricTransformation_PixelReplicator」這兩種設計(第 進行明確的生命週期管理即呼叫
) 目標座標
根據式( )進行逆變換。
21 並進行額外的縮放(另請參閱第
).
接著,我們利用逆變換所得的座標,在
HierarchicalBoxes 中執行逆梯形變形與失真校正
KeystoneCorrrection 進行明確的生命週期管理即呼叫 失真校正. 這些方框的內容如圖所示。
315 以及圖
314.
在這些方塊中,等式... 22 以及
等式。 23 已實作。方框中的矩陣元素 m1 至 m9
Z_x, Z_y 進行明確的生命週期管理即呼叫 N (參見圖 315)
可透過 OpenCV 函式庫進行計算 [Ope16b]. 針對範例圖片「Example.tif」
(位於 \examples\Processing\Geometry\GeometricTransformation 目錄下),您可以在同一位置的「MatrixValues.txt」
文字檔中找到範例矩陣的數值。
關於圖中所示的 變形校正, 314 首先,將座標轉換
至以光學中心為基準的座標系中(座標轉換_x 進行明確的生命週期管理即呼叫 座標變換_y),
該點在大多數情況下即是影像中心。在 HierarchicalBox 中 失真係數 距離
(參見方程式 23) 距光學中心的距離被計算出來。對於每個
接著是失真校正
參數
存在於查閱表中(參見圖。
317).
該查找表是透過 Matlab 模組在外部建立的,您可以在 \examples\Processing\Geometry\GeometricTransformation
\LUTDistortionCorrection.m 中找到它,以及相關的畸變參數
進行明確的生命週期管理即呼叫
使用 OpenCV 函式庫所建立 [Ope16b]. 在「LUTDistortionCorrection.m」中,您可以找到作為範例的校正參數
進行明確的生命週期管理即呼叫
以範例圖片「Example.tif」為例(位於 \examples\Processing\Geometry\GeometricTransformation 目錄下)[Ope16a].
該係數
接著與座標相乘
進行明確的生命週期管理即呼叫
(圖。
314). 隨後將這些變形的
座標轉換回以「圖像左上角
」為基準的座標系(參見方框 座標轉換_x 進行明確的生命週期管理即呼叫 座標變換_y). 其
結果即為原始影像的座標
進行明確的生命週期管理即呼叫
. HierarchicalBox 的內容
限制座標值 (圖。 314)
為變換後的影像座標設定邊界條件。 在將整數位元部分與小數位元部分分離之後
(參見方框 SplitFractionalAndIntegerBit 如圖 298) 從原始影像中讀取計算出的
對應整數座標處的像素值。
小數位用來進行雙線性插值(參見 Interpolation) 根據 [Bur06]
藉此修正輸出影像中因原始
影像中像素間位置所導致的像素值。訊號透過 DMA 傳輸至個人電腦。
為示範之用,請參見圖。 318,
319 進行明確的生命週期管理即呼叫
320 失真的原始影像、
已校正梯形變形與失真的目標影像,以及已旋轉並校正失真的目標影像。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\DistortionCorrection.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 在此範例中,實作了失真校正功能。 |
|
在設計「DistortionCorrection.va」中,實現了根據式 (22) 進行的畸變校正。其運作方式與設計「GeometricTransformation_DistortionCorrection.va」中的方法類似, 但不執行幾何變換與梯形校正。您可參閱圖 321 了解其基本設計結構。
此設計包含一個採用Camera Link 基礎配置的灰階攝影機介面、一個緩衝模組,以及 HierachicalBox DistortionCorrection 以及 DmaToPC。灰階影像的畸變校正是在 DistortionCorrection中進行。您可參閱圖322 了解其內容。
其結構與 HierarchicalBox 的內容相似 幾何變換 (參見
圖 298) 在設計「GeometricTransformation_PixelReplicator.va」的
節中 . 該營運商 FrameBufferRandomRead 被
HierarchicalBox 所取代 FrameBufferRandomRd_Par8 如同在「GeometricTransformation_PixelReplicator.va」和「GeometricTransformation_DistortionCorrection.va」中所做的那樣
(參見第 進行明確的生命週期管理即呼叫
). 原始圖像會以線性方式寫入緩衝元件中
FrameBufferRandomRd_Par8. 在此模組中,每個像素都會與其三個最近鄰一併儲存(參見方框 CollectNeighbors 收件匣中
FrameBufferRandomRd_Par8). 內附 座標轉換/ 輸出圖片 目標影像的座標
是使用運算子建立的 CreateBlankImage,
CoordinateX 進行明確的生命週期管理即呼叫 Y座標. 這些座標會根據式(1)進行變換。 22 至
原始影像的座標
在 HierarchicalBox
逆修正 (參見 方框 座標轉換). 其內容可參見圖。 323.
這相當於實作 box 失真校正 「GeometricTransformation_DistortionCorrection.va」的(參見圖
316). 對於每個目標影像的半徑
相對於影像中心的查找表值
C_r 在 HierarchicalBox 中被選中 失真係數. C_r 與目標影像座標相乘
根據方程式 22
並轉換回以第一個像素為原點的座標系(參見 座標轉換_x_1 進行明確的生命週期管理即呼叫 座標轉換_y_1). 如您所見,在
圖中。 322 所得的來源座標在該方框中被分為整數部分和小數部分
SplitFractionalAndIntegerBit. 整數部分用於讀取來源影像中對應座標處的像素,而小數
部分則用於對最終結果進行雙線性插值。經失真校正後的影像會透過 DMA
傳輸至個人電腦。




上一頁

